package com.zpark.service;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 自定义userDetailsService类
 */
// @Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 模拟从数据库获取用户名和密码
        String uname = "dc";
        String password = "123456";

        //模拟写法
        /**
         * 将角色字符串转换为授权列表。
         *
         * @param role 字符串表示的角色，这里假设为"role"。通常，角色字符串以逗号分隔，用于表示多个角色。
         * @return 返回一个GrantedAuthority类型的列表，这些权限代表了给定角色字符串所表示的权限。
         *
         * 注意：这里的实现假设角色字符串是预定义的，并且不接受逗号分隔的多个角色。如果需要处理多个角色，
         * 应该修改输入字符串的格式，例如使用"role1,role2"的格式，并相应地更新处理逻辑。
         */
        List<GrantedAuthority> auths =
                AuthorityUtils.commaSeparatedStringToAuthorityList("ADMIN, USER");

        return new User(uname, new BCryptPasswordEncoder().encode(password), auths);
    }
}
